home *** CD-ROM | disk | FTP | other *** search
/ MIDICraft's MIDINET CD-ROM / MIDICraft's MIDINET CD-ROM.iso / DOSUTILS / MIDI1TO0.DOC < prev    next >
Text File  |  1996-12-29  |  7KB  |  170 lines

  1.         ******************************
  2.             MIDI1TO0 v1.2
  3.     
  4.            midi binary format 1 to 0
  5.               by Guenter Nagler 
  6.                 1995 
  7.           (gnagler@ihm.tu-graz.ac.at)
  8.         ******************************
  9.  
  10. [0] FEATURES
  11.     + reads a binary midi file of format 1 (needs to be valid)
  12.     + writes a binary midi files of format 0 
  13.     + combines all tracks of input into one track 
  14.     + sorts events in order of time
  15.     + careful merging of tracks that share same channel 
  16.  
  17. [1] BACKGROUND
  18. Midi format 1 contains a tempo track and one or more singlechannel 
  19. tracks that should be played together. Midi format 0 contains only
  20. one track. Midi format 0 files are efficienter to handle for 
  21. midi players because all events are directly one after the other.
  22. For Midi 1 files the player must merge the midi commands from all tracks
  23. in real time (in real time).
  24. Most Midi players can't play format 1 files correctly. 
  25. I noticed some typical types where many midi players fail:
  26.  * The player refuses loading format 1 files and only accepts format 0 files
  27.    (many keyboards, some software players)
  28.  * The midi file format 1 contains masses of tracks (> 16, some produced
  29.    over 100 tracks not each track really contained music)
  30.  * The midi file contains some tracks that share the same channel 
  31.    (e.g. percussion, drums)
  32.    using different parameters (e.g. volume, effects) 
  33.    The player might play it but does not care of the different track parameters
  34.    (e.g. plays all those tracks with same program and same volume, effects...)
  35.  
  36. MIDI1TO0 produces a format 0 midi file that can solve these problems.
  37. Using option -exact it is careful with track parameters so that most channel conflicts between
  38. tracks are solved. Under some conditions this is not possible because of 
  39. midi restrictions and is usually an error of the midi file author.
  40.  
  41. Standard midi restriction: 
  42.   Two tracks cannot play same note on same channel at same time with 
  43.   different note parameters (e.g. different programs)!
  44.   The author must use different channels in such cases, or the note 
  45.   will be played with only one of the conflicting parameter settings!
  46.  
  47. Information: 
  48.   Sometimes careful merging of tracks sharing same channel can produce
  49.   results with bad sound (e.g. loudness of a sound quickly changes between
  50.   high and low). In such cases the conversion can not be done automatically
  51.   because of channel conflicts. It would need to edit the original file first
  52.   manually with a midi editor to solve the channel problems (use alternate 
  53.   channels if possible, or try to use same parameters in these tracks, or 
  54.   prevent playing notes on these tracks at same time.
  55.  
  56. Use MIDIFMT *.mid to show the version of midi files.
  57.  
  58. [2] FILES DESCRIPTION
  59.  
  60. MIDI1TO0.EXE.........converter program
  61. MIDI1TO0.DOC.........this file, showing usage of MIDI1TO0.EXE
  62. MIDIIO.HPP...........header file for a c++ midi parser
  63. MIDIIO.CPP...........source code for a c++ midi parser
  64. MIDI1TO0.CPP.........c++ source code for midi 1 to 0
  65. MIDI1TO0.MAK.........make file for project 
  66. MIDI1TO0.CFG.........compiler options for make
  67. MIDI1TO0.PRJ.........compiler project for borland c++ compilers
  68. only MIDI1TO0.EXE is required to run program
  69.  
  70. [3] COPYRIGHT
  71.  
  72. MIDI1TO0 (c) 1995 was created by Guenter Nagler.
  73.  
  74. MIDI1TO0 is free and may be used as you wish with this one exception:
  75.  
  76.     You may NOT charge any fee or derive any profit for distribution
  77.     of MIDI1TO0.  Thus, you may NOT sell or bundle MIDI1TO0 with any 
  78.     product in a retail environment (shareware disk distribution, CD-ROM,
  79.     etc.) without permission of the author.
  80.  
  81. You may give MIDI1TO0 to your friends, upload it to a BBS, or ftp it to
  82. another internet site, as long as you don't charge anything for it.
  83.  
  84. [4] DISCLAIMER
  85.  
  86. MIDI1TO0 was designed to handle 100% compatible midi files.
  87. Normally the program stops when illegal or corrupt midifiles are 
  88. used at input. 
  89.  
  90. Use MIDI1TO0 at your own risk.  Anything you do with MIDI1TO0 is your
  91. responsibility, and not the author's.  Any damage caused to any person,
  92. computer, software, hardware, company, or business by running MIDI1TO0 
  93. is your responsibility, and the author will not be liable.
  94.  
  95. If you don't understand these terms, or are not sure of something, or
  96. are afraid something bad might come of using MIDI1TO0, don't  use  it!
  97. You are here forewarned.
  98.  
  99. [5] INSTALLATION
  100.  
  101. [MSDOS]
  102. Simply copy MIDI1TO0.EXE in a directory that is in your path.
  103. When you start the program without arguments
  104.  
  105. C:\> MIDI1TO0
  106.  
  107. you should get the usage text (see next section)
  108.  
  109. [UNIX]
  110. compile sources with your C++ compiler (e.g. GNU Compiler g++):
  111.  
  112. g++ -o midi1to0 midi1to0.cpp midiio.cpp
  113.  
  114. and run program
  115.  
  116. $ midi1to0
  117.  
  118. [6] USAGE
  119.  
  120. usage: midi1to0 [-quiet] [-exact] srcfile.mid dstfile.mid
  121. -quiet    be quiet, don't tell percentage
  122. -exact    solve merging tracks with conflicting channel by
  123.     refreshing all track parameters before playing notes
  124.  midi1to0 merges channels into one track
  125.  This program only converts format 1 midi files.
  126. -quiet    be quiet, don't tell percentage
  127. -exact    solve merging tracks of same channel by refreshing
  128.   all parameters before playing notes.
  129.  
  130. MIDI1TO0 does not convert files that are not of format 1!
  131. In this case the program prints the version and exits.
  132.  
  133. Warning: MIDI1TO0 does not warn about overwriting existing destfile.mid !
  134.  
  135. [8] SUGGESTIONS / COMMENTS / BUG REPORTS / QUESTIONS
  136.  
  137.          WWW:    http://hgiicm.tu-graz.ac.at/Cpub
  138.           contains all my dos/unix midi programs
  139.          EMAIL:  gnagler@ihm.tu-graz.ac.at
  140.  
  141. [9] USE
  142. For example, you have a midi file example1.mid that you expect to be format 1.
  143.  
  144. MIDI1TO0 example1.mid example0.mid
  145.  
  146. If it is a format 2 midi, the program will stop with a message like that:
  147.    "example1.mid is format 2. This program does not convert it to 0."
  148.  
  149. If it is a format 0 midi, the program will stop with a message like that:
  150.    "example1.mid is already format 0"
  151.  
  152. If it is a format 1 midi, it will try to merge all tracks into example0.mid:
  153.   23%  (counting from 0 to 100)
  154.   "output written to example0.mid"
  155.  
  156. [10] CHANGES
  157. v1.0 to v1.1:
  158.   - added option -quiet (default is verbose)
  159.     error messages are printed in all cases
  160.   - modifications in midi input/output parser 
  161.   - little bug fixed: some files produced more than one
  162.     end of track messages inside format 0 track
  163.  
  164. v1.1 to v1.2:
  165.   - using advanced midi parser midiio
  166.   - added option -exact: careful merging of tracks with same channel (all channel and track
  167.     parameters are stored and restored before playing notes).
  168.   - added hidden option -version to shows program version
  169.       usage:  midi1to0 -version
  170.